#ifndef ARRAY_MEM_H_
#define ARRAY_MEM_H_


template<typename T>
void * newArray(T& t,int n,int* arr){
    
    if(n==0){
        return new  T();
    }else{
        size_t systemSize =  sizeof(nullptr);
        int s = *arr;
        void * p ;
        p = malloc ( systemSize* s);

        int ak [n-1];

        for(int i=1;i<n;i++){
            ak[i-1]=arr[i];
        }
        
        void ** ptr = (void **)p;
        for(int k =0;k<s;k++){
            
            ptr[k] = newArray(t,n-1,ak);
        }

        return p;
    }
    

}


template<typename T>
void delArray(void * p ,T& t,int n,int* arr){
   
    if(n==0){
         T * r = (T * ) p;
         delete r ;
    }else{

        int ak [n-1];

        for(int i=1;i<n;i++){
            ak[i-1]=arr[i];
        }
        int s = *arr;
        void ** ptr = (void **)p;

        for(int i=0;i<s ;i++){
            delArray(ptr[i],t,n-1,ak);
        }
        free(p) ;
    }
}

#endif